实用
删除乱码/中文文件或目录
ls -i //列出文件节点
find ./ -inum XXX(节点号) -print -exec rm -rf {} \; //删除节点号文件
find . -inum XXXX(节点号) -exec mv {} file.txt \; //其实我们还可以执行这个命令,修改乱码文件名为正常文件名
grep
查找文件中内容
grep -nir “.top-bg” ./
网络相关
刷新DNS缓存: ipconfig /flushDNS
ipconfig /all
nslookup mix.compd.com
mac 刷新dns缓存
1 | # OS X Yosemite and later |
chrome浏览器:chrome://net-internals/#sockets
\$_PS: 有时强制刷新页面dns也不刷新,老吃亏了
查看端口号(进程)
在Linux 上的 /etc/services 文件可以查看到更多关于保留端口的信息。
可以使用以下六种方法查看端口信息。
ss:可以用于转储套接字统计信息。
netstat:可以显示打开的套接字列表。
lsof:可以列出打开的文件。
nmap:是网络检测工具和端口扫描程序。
systemctl:是systemd 系统的控制管理器和服务管理器。1
2
3
4
5
6
7
8## 1、使用lsof 命令来查看端口是否开放
lsof -i:6379 # //如果有显示说明已经开放了,如果没有显示说明没有开放
## 2、使用netstat 命令来查看端口是否开放
netstat -aptn |grep -i 6379 # //查看是否监听在0.0.0.0:6379
netstat -lptn |grep -i 6379 //查看TCP类型的端口
netstat -lpun |grep -i 6379 //查看UDP类型的端口
## 3、使用telnet方式测试远程主机端口是否打开
telnet 127.0.0.1 6379 //telnet IP 端口号
###
netstat npl |grep nginx
ps -ef | grep nginx | grep -v grep
ps aux | grep nginx
常用命令
文件操作
基本操作
查看的命令是cat host.xml;
ls命令会把文件横向显示,看着不舒服,ll和ls -l是一样的效果,建议使用ll,因为它最简单
在Linux系统下执行文件我们需要使用的的 ./文件名.sh
授权命令,chmod u+x .sh 给sh文件授权,当然了我们也可以将替换为具体的文件名
文件上传
上传 rz -y (当前路径); 下载 sz file.text(只不过默认情况下是不能使用的,我们需要使用yum install lrzsz来安装)
$PS: 输入rz命令,看是否已经安装了lrzsz,如果没有安装则执行 yum -y install lrzsz命令进行安装。
$PS: 另外:可以下载工具xftp去传输文件。
下载后,从xshell点击新建文件传输按钮,就会打开xftp工具,来更专业的传输文件。
快捷键:Ctrl+Alt+F
文件下载
sz filename
sz filename1 filename2
sz dir/*
文件夹及文件夹下的所有文件的复制【cp -r 源文件目录 目标文件目录】
[root@localhost /]# cp -r /soft/bak/* /home/bak
文件编辑
编辑的命令是vi host.xml,然后按下i,进入修改模式,要不然就只是看,
如果我们突然不想修改时,按下ESC 然后在命令行中写下 :q! ? 然后回车就接触编辑,
如果我们是编辑完了需要保存,也需要按下ESC,然后输入 :wq 回车。
总结一下就是:编辑文件 vi,按下i进行编辑 ??保存结束编辑 ESC :wq 回车 ??不保存结束编辑 ESC :q! 回车
设置编码格式:工具条上有个地球的图标 可以设置,可能需要重启
文件统计
Linux获取一个文件的行数或者字符数
wc命令主要对文件中的行数、字符数、字节数进行计数
-c 统计字节数,除非指定 -k 标志。如果指定 -k 标志,wc 命令统计字符数。
-k 统计字符数。指定 -k 标志等同于指定 -klwc 标志。如果把 -k 标志同其它标志一起使用,那么必须包含 -c 标志。否则,将会忽略 -k 标志。
-l 统计行数。
-m 统计字符数。这个标志不能与 -c 标志一起使用。
-w 统计字数。一个字被定义为由空白、跳格或换行字符分隔的字符串。
1字节(Byte)= 8位(bit)
在ASCII码中,一个英文字母(不分大小写)占一个字节的空间,
中文字符占两个字节
文件压缩/解压
tar -czvf file file.tar.gz
tar -xzvf file.tar.gz
\$_PS: 压缩比例大致为1/10
解压 .tar.xz 文件`xz -d .tar.xz`
查找文件
语法:find + 目标目录(路径) + <选项> + 参数
-perm <权限数值> 查找符合指定的权限数值的文件或目录
-type <文件类型> 只寻找符合指定的文件类型的文件
-name <范本样式> 指定字符串作为寻找文件或目录的范本样式
-expty 寻找文件大小为 0 Byte 的文件,或目录下没有任何子目录或文件的空目录
-ls 假设find指令的回传值为ture,就将文件或目录名称列出到标准输出
-maxdepth <目录层级> 设置最大目录层级
-mindepth <目录层级> 设置最小目录层级
-exec <执行指令> 假设find指令的回传值为true,就执行该指令
-ok <执行指令> 此参数的效果和指定-exec类似,但在执行指令之前会先询问用户,若回答y或Y,则放弃执行命令1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22find ./ -name 'txt.json'
find ./ -name '*.json'
示例 3:组合查找文件名以file1开头(与、或、非)file2开头的文件
/**
* 组合查找语法:
* -a 与(取交集)
* -o 或(取并集)
* -not 非(同 !)
* ! 非(同 not)
*/
find . -name "file1*" -a -name "file2*"
find . -name "file1*" -o -name "file2*"
find . -name "file1*" -not -name "file2*"
find . -name "file1*" ! -name "file2*"
示例 4:根据文件类型进行搜索
/**
* 查找当前目录及所有子目录下的普通文件
*/
find . -type f
其他方式:
find | grep luoluo
将当前目录下(包括子目录)的文件名中含有luoluo的文件过滤出来
即使是当前目录子目录下的文件,也能被找出来。
find | xargs grep luoluo
将当前目录下(包括子目录)的文件内容中含有luoluo的行过滤出来
ll | grep luoluo
类似find | grep luoluo,只是不能递归查找子目录下的文件名
修改文件内容
shell脚本替换文件内容常用的方法有四种,会用到sed,find ,grep,awk等命令。
方法一:find -name ‘要查找的文件名’ | xargs perl -pi -e ‘s|被替换的字符串|替换后的字符串|g’
代码示例:find -name 'pom.xml' | xargs perl -pi -e 's|http://repo1.maven.org/|http://registry.taobao.com/groups/public|g'
方法二:sed -i “s/原字符串/新字符串/g” grep 原字符串 -rl 所在目录
代码示例:sed -i "s#10.220.96.205:8022#11.1.14.145#g" 'grep mahuinan -rl ./'
注:命令中的#可以替换成/或者|,以便于和字符串区分。
方法三:grep “原字符串” -R | awk -F: ‘{print $1}’ | sort | uniq | xargs sed -i ‘s/原字符串/新字符串/g’
代码示例:
`grep “master” -R | awk -F: ‘{print $1}’ | sort | uniq | xargs sed -i ‘s/master/release/g’`
批量替换配置文件中的IP:
grep “[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}“ * -R | awk -F: ‘{print $1}’ | sort | uniq | xargs sed -i ‘s/[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}/172.0.0.1/g’
方法四: find 所在目录 -type f -path “文件名称”|xargs sed -i ‘s: 原字符串 : 新字符串 :g’
代码示例:1
2find ./ -name "*"|xargs grep "/data/" #查询匹配结果
find ./ -type f -path "*.sh"|xargs sed -i 's:/data/:/databak/:g' #查找并替换
sed
PS: 也是修改文件内容。sed [-hnV][-e<script>][-f<script文件>][文本文件]
动作说明:
a :新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~
c :取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!
d :删除,因为是删除啊,所以 d 后面通常不接任何东东;
i :插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);
p :打印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行~
s :取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正规表示法!例如 1,20s/old/new/g 就是啦!
sed 全名为 stream editor,流编辑器,用程序的方式来编辑文本
sed -i 就是直接对文本文件进行操作的sed -i 's/old/new/g' test.file
#### 问题
在mac 上 sed -i 报错:unterminated substitute pattern
解决: sed -i '' 's/staging\.//g' ./*
grep命令
1.作用
Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来。grep全称是Global Regular Expression Print,表示全局正则表达式版本,它的使用权限是所有用户。
2.格式
grep [options]
别名设置
1 | # 查看已经设置的别名 |
直接在命令行配置,只在当前shell/tab 有效
磁盘使用情况
du -sh /var/www/*
df -h
查看系统信息
一、linux下如何查看已安装的centos版本信息:
1.Linux查看当前操作系统版本信息 cat /proc/version
Linux version 2.6.32-696.el6.x86_64 (mockbuild@c1bm.rdu2.centos.org) (gcc version 4.4.7 20120313 (Red Hat 4.4.7-18) (GCC) ) #1 SMP Tue Mar 21 19:29:05 UTC 2017
2.Linux查看版本当前操作系统内核信息 uname -a
Linux localhost.localdomain 2.4.20-8 #1 Thu Mar 13 17:54:28 EST 2003 i686 athlon i386 GNU/Linux
3.linux查看版本当前操作系统发行信息 cat /etc/issue
或 cat /etc/centos-release
4.Linux查看cpu相关信息,包括型号、主频、内核信息等 cat /etc/cpuinfo
5.Linux查看版本说明当前CPU运行在32bit模式下(但不代表CPU不支持64bit) getconf LONG_BIT
二、uname的使用
uname命令用于打印当前系统相关信息(内核版本号、硬件架构、主机名称和操作系统类型等)。
三、查看Linux版本
1.查看系统版本信息的命令 lsb_release -a
(使用命令时提示command not found,需要安装yum install redhat-lsb -y)
2.查看centos版本号 cat /etc/issue
CentOS release 6.9 (Final)
3.使用 file /bin/ls
防火墙
开启关闭服务器防火墙:
查看防火墙是否开启(如果显示running,则防火墙为开启状态):
firewall-cmd –state
关闭防火墙:
systemctl stop firewalld.service
开启防火墙:
systemctl start firewalld.service
关闭开机自启动:
systemctl disable firewalld.service
开启开机自启动:
systemctl enable firewalld.service
开放3306端口开启3306 端口
firewall-cmd –zone=public –add-port=3306/tcp –permanent
重启防火墙
firewall-cmd –reload
查看防火墙状态 显示success 即成功开启
systemctl status firewalld
查看指定端口状态 显示 success 即端口成功开启
firewall-cmd –query-port=6379/tcp
2019.6.26 星期三 23:21 $1
定时任务
在Linux下使用Crontab来添加定时任务执行shell文件.shell文件有数据库备份命令
查看/etc/crontab文件: vim /etc/crontab
除了root用户之外的用户可以执行crontab配置计划任务。
所有用户定义的crontab存储在目录/var/spool/cron下,任务会以创建者的身份被执行。
要以特定用户创建一个crontab,先以该用户登录,执行命令crontab -e,系统会启动在VISUAL或者EDITOR中指定的的编辑软件编辑crontab。
文件内容与/etc/crontab格式相同。示例如下:
crontab文件格式:* * * * * command
minute(1-59)(或/1表示每分钟) hour(1-23)(0表示0点)
day(1-31) month(1-12) week(1-6, 0表示周日)
30 3,12 * /home/test.sh
#### crontab命令选项:
-u 指定一个用户
-l 列出(某个用户的)任务计划
-r 删除(某个用户的)任务
-e 编辑(某个用户的)任务
查看执行的日志 cat /var/log/cron
1 | 1. 查看调度任务 |
#### 特殊符号
1.星号()表示取值范围内的所有值。例如,在hour的位置,表示每小时执行一次。
2.连字符(-)表示一个范围。例如,8-12表示8、9、10、11、12。
3.逗号(,)表示分割指定的数值。例如:3,5-7,9表示3,5,6,7,9。
4.正斜杠(/)表示步进值。例如,分钟的位置为/5,表示每五分钟执行一次
5.“?”只用于 日(Day of month) 和 星期(Day of week),表示不指定值,可以用于代替
6.“#”字符:表示该月第几个周X。6#3表示该月第3个周五
7.“L”字符:用在日表示一个月中的最后一天,用在周表示该月最后一个星期X
8.“W”字符:指定离给定日期最近的工作日(周一到周五)
#### 2 检查是否安装了crontab,
如果提示未安装请自行安装,crontab安装包在系统光盘里面的pacekage文件夹crontabs安装包。rpm -qa | grep conrtab
#### crontab服务的启动关闭1
2
3
4sbin/service crond start //启动服务
/sbin/service crond stop //关闭服务
/sbin/service crond restart //重启服务
/sbin/service crond reload //重新载入配置
#1 [crontab命令概念]
#### 全局配置文件:
crontab在/etc目录下面存在cron.hourly,cron.daily,cron.weekly,cron.monthly,cron.d五个目录和crontab,cron.deny二个文件。
cron.daily是每天执行一次的job
cron.weekly是每个星期执行一次的job
cron.monthly是每月执行一次的job
cron.hourly是每个小时执行一次的job
cron.d是系统自动定期需要做的任务
crontab是设定定时任务执行文件
cron.deny文件就是用于控制不让哪些用户使用Crontab的功能
#### **定时任务书写要领**
要领1:定时任务要加注释
要领2:定时任务命令或脚本结尾加 &>/dev/null 或 >/dev/null 2>&1 或 1>/dev/null 2>/dev/null
要领3:定时任务执行shell脚本前加/bin/sh,定时任务执行shell脚本不必添加执行权限
要领4:定时任务命令或程序尽量写到脚本里,定时任务只要执行脚本即可
注意操作步骤:
(1)、命令行执行
(2)、编写脚本
(3)、测试脚本
(4)、设置定时任务
要领5:生产任务程序不要随意打印输出信息
要领6:定时任务执行的脚本要规范路径 (例如 /server/script)
要领7:配置定时任务要规范操作过程
要领8:定时任务执行特殊的字符需要进行转义,否则会报错,例如 百分号% 转义 \%
要领9:定时任务脚本中如果涉及使用到环境变量,必须在脚本中重新定义,不然,定时任务识别不了
### 其他定时任务指令
1、at
命令at从文件或标准输入中读取命令并在将来的一个时间执行,只执行一次。at的正常执行需要有守护进程atd
2、crontab
命令crontab用来设置、移除、列出服务crond表格,crond服务的作用类似atd,区别的地方在于crond可以设置任务多次执行。相对来说比atd更常用。
3、systemd.timer
crond和atd服务基于分钟的,意思是说它们每分钟醒来一次检查是否有任务需要执行。如果有任务的执行需要精确到秒,crond和atd是无能为力的。在基于systemd的系统上,可以通过计时器systemd.timer来实现精确到秒的计划任务。
2019.6.27 00:12 $1
后台运行
【Linux】后台运行进程的命令
一、简介
Linux提供了fg和bg命令,可以轻松调度正在运行的任务
Ctrl-Z 挂起程序
bg %n 把程序调度到后台执行,bg后面的数字为作业号
jobs 查看正在运行的任务
fg %n 把程序调回到前台运行,这样在控制台上就只能等待任务完成
kill %n 管理后台的任务
【3】Linux后台运行进程有两种方式
command &:后台运行,关掉终端会停止运行
nohup command &:后台运行,关掉终端会继续运行
二、&
【1】可以使用&命令,把作业放到后台执行,实际是放入到一个作业队列中
jobs -l 可以查看当前的后台进程
三、nohup
【1】可以使用nohup命令运行进程,并且在退出帐号后可以继续运行,nohup就是不挂起(no hang up)
【2】一般形式:nohup command &
【3】使用nohup命令提交作业,在缺省情况下该作业的所有输出都被重定向到一个名为nohup.out的文件中,除非另外指定了输出文件
指令或符號 使用範例 說明
& % fasta & 在背景中執行程式
jobs % jobs 顯示送入背景之工作
kill % kill (job#) 移除指定之批次工作
ctrl-z 暫停前景中執行之程式
bg % bg 將暫停之工作送入背景執行
fg % fg 將背景之工作拉回前景執行
5.如何结束一个job
如果你想结束一个正在运行的job,可以使用中断键(interrupt key,通常是Ctrl-C)来结束。
如果上面方法无法正常工作,那么你可以考虑使用Ctrl-Z(Suspend key)来暂停job,使用’jobs’命令来查看这个job的job number,然后通过’kill’命令来结束这个job.
Linux下Ctrl-Z、Ctrl-C、Ctrl-D的具体含义
初识Linux,可能会对Ctrl-Z、Ctrl-C、Ctrl-D的具体含义混淆不清,因为这三个按键都能够在一些情况下使shell退出正在执行的命令或程序,提示用户输入下一个命令,从而对初识者造成假象,认为三个键的功能一样,但具体情况下哪个按键能起作用、起什么作用却拿捏不定。
Ctrl-Z:该键是linux下面默认的挂起键(Suspend Key),当键入Ctrl-Z时,系统会将正在运行的程序挂起,然后放到后台,同时给出用户相关的job信息。此时,程序并没有真正的停止,用户可以通过使用fg、bg命令将job恢复到暂停前的上下文环境,并继续执行。
Ctrl-C:该键是linux下面默认的中断键(Interrupt Key),当键入Ctrl-C时,系统会发送一个中断信号给正在运行的程序和shell。具体的响应结果会根据程序的不同而不同。一些程序在收到这个信号后,会立即结束并推出程序,一些程序可能会忽略这个中断信号,还有一些程序在接受到这个信号后,会采取一些其他的动作(Action)。当shell接受到这个中断信号的时候,它会返回到提示界面,并等待下一个命令。
Ctrl-D:该键是Linux下面标准输入输出的EOF。在使用标准输入输出的设备中,遇到该符号,会认为读到了文件的末尾,因此结束输入或输出。
同步时间
3,通过网络同步时间
(1)首先安装 ntpdate 命令:
yum install -y ntpdate
(2)接着执行如下命令开始同步:
ntpdate 0.asia.pool.ntp.org
若上面的时间服务器不可用,也可以改用如下服务器进行同步:
time.nist.gov
time.nuri.net
0.asia.pool.ntp.org
1.asia.pool.ntp.org
2.asia.pool.ntp.org
3.asia.pool.ntp.org
(3)最后执行如下命令将系统时间同步到硬件,防止系统重启后时间被还原。
hwclock –systohc
用户相关
查看用户信息
用户可以在shell中登录,修改vi /etc/passwd
最后一个 :/bin/bash.1
user1:x:1003:1004::/home/user1:/bin/bash
Linux修改密码用 passwd 命令,用root用户运行passwd ,passwd user_name可以设置或修改任何用户的密码,普通用户运行passwd只能修改它自己的密码。1
2
3
4
5
6
7
8
9
10
11
12# Linux下查看用户列表
cat /etc/passwd
# 查看用户组
cat /etc/group
# 查看当前活跃的用户列表
w
## 但是,你会发现,在使用上面的 cat 命令所打印出来的东西太杂乱了,于是网上找到下面的这个命令:
### 对于 cat /etc/passwd 的替换
cat /etc/passwd|grep -v nologin|grep -v halt|grep -v shutdown|awk -F":" '{ print $1"|"$3"|"$4 }'|more
# 查看登录情况
lastlog
密钥生成
创建角色
开启SSH远程登录
端口开启
创建用户(组)
1 | ### 1 root权限设置 ## |
开启SSH远程登录
在服务器的/etc/ssh/sshd_cinfig文件下可以管理ssh服务:vim /etc/ssh/sshd_config
service sshd restart
或者/etc/init.d/ssh restart
或者sudo systemctl restart sshd
PasswordAuthentication yes/on ———————-> 开启或者关闭密码连接
PermitRootLogin yes/no —————————–>允许超级用户登录
AllowUsers student—————————–>只允许登录的用户
DenyUsers student————————–>不允许登录的用户
(也可以添加用户组:AllowGroups:group1 group2)
DenyGroups:groupname
整个系列配置的优先级:DenyUsers>AllowUsers>DenyGroups>AllowGroups
1 | ssh [-l login_name] [-p port] [user@]hostname |
端口开启
1 | sudo vi /etc/sysconfig/iptables |
sftp开启
一般我们需要安装openssh-server、openssh-sftp-server,所以我们检查是否安装了SSH。
Ubuntu检查是否安装了OpenSSHdpkg --get-selections | grep openssh
CentOS检查是否安装了OpenSSH
以yum方式安装的:yum list installed openssh1
2
3
4
5# Ubuntu
sudo apt-get update
sudo apt-get install openssh-client openssh-server openssh-sftp-server
# CentOS
sudo yum install openssh-client openssh-server openssh-sftp-server
vi /etc/ssh/sshd_config
修改X11Forwarding的值为no #这两行,如果不希望该用户能使用端口转发的话就加上,否则删掉
修改AllowTcpForwarding的值为no #这两行,如果不希望该用户能使用端口转发的话就加上,否则删掉
修改Subsystem sftp为internal-sftp #指定使用sftp服务使用系统自带的internal-sftp $_PS: 会影响ssh登录
然后再到文件最尾处增加配置设定属于用户组sftpusers的用户都只能访问他们自己的home文件夹
Match Group sftp-users
ChrootDirectory %h
ForceCommand internal-sftp #指定sftp命令 $_PS: 会影响ssh登录
这里要特别注意,因为ChrootDirectory %h模式,所以我们等下要设置sftp-users中的所有用户的用户目录权限为root拥有,否则sftp-users组中的用户无法用sftp登录。
sftp登录www用户,进入ui目录,即可在/home/www/ui下,对文件进行添加、修改、删除的操作
su、sudo
$_TODO: 整理。
root 安装的软件/指令 如何让其他用户可以使用
sudo
可以使用sudo命令,sudo命令就是为了让普通用户可以在不知道root密码的情况下使用root的操作权限。
但是,你会发现这样执行会提示用户没有sudo的权限,所以我们需要先简单配置一下。
visudo
修改用户可以执行sudo 指令。且不需要输入密码
jumpadmin ALL=(ALL) NOPASSWD:ALL
dev ALL=(ALL) NOPASSWD: /bin/su
user1 ALL=(ALL) NOPASSWD: ALL
user1 ALL=(ALL) NOPASSWD: /bin/su
## 2、如果不想testuser04用户能使用所有root才能执行的命令,只能执行某个root才能执行的命令,比如ls命令,那么我们就需要:
su
su命令用于切换当前用户身份到其他用户身份,变更时须输入所要变更的用户帐号与密码。
命令su的格式为:su [-] username
1、后面可以跟 ‘-‘ 也可以不跟,普通用户su不加username时就是切换到root用户,当然root用户同样可以su到普通用户。 ‘-‘ 这个字符的作用是,加上后会初始化当前用户的各种环境变量。
root用户切换到普通用户无需输入密码,普通用户切换到root用户需要密码。